Python正则匹配的应用——替换括号及括号内字符、文本分句

本文是在实际处理文本时遇到的两个应用。

1、剔除括号及括号内的数据

     用正则匹配的方法,替换掉目标字符串为空,具体示例如下:

s = "我是一个人(中国人)aaa[真的]bbbb{确定}"
a = re.sub(r"\(.*?\)|\{.*?\}|\[.*?\]", "", s)
print(a)

output:
我是一个人aaabbbb

 解释:正则匹配的规则也是从左往右开始匹配的。因为括号()在正则匹配中有特殊用法,所以这里用\(和\)的方式匹配正反括号。“.”表示匹配任意初换行之外的字符,“*”表示匹配其前面的字符0次或无数字,那这样的话,"\(.*"这个表示匹配的字符串以正括号开始,后面0个或者任意个数的非换行字符。 

关于“?”的使用:

(1)如果是跟在一般符号后面,则表示匹配表达式0次或1次。比如“do(es)?”,这里就是表示匹配一定以do开头,但是es出现0次或者1次。所以“do(es)?”可以匹配的字符串包括“does”和“do”。在正则匹配中,(pattern)表示匹配pattern 并获取这一匹配,要匹配圆括号字符,则使用 '\(' 或 '\)'。

(2)如果是跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。关于贪婪和非贪婪匹配可以看底下的例子。

2、贪婪匹配和非贪婪匹配

      对于贪婪和非贪婪的的影响,在实践中,觉得最大的影响就是对括号的匹配。

s = "我是一个人(中国人)哈哈哈哈哈(真的)bbbb{确定}"
# 非贪婪模式
print(re.findall(r"\(.*?\)", s))
# 贪婪模式
print(re.findall(r"\(.*\)", s))

输出结果:
['(中国人)', '(真的)']
['(中国人)哈哈哈哈哈(真的)']

2、只替换括号内的内容

s = "我是一个人(中国人)aaa[真的]bbbb{确定}"
b = re.sub(r"(?<=\().+?(?=\))|(?<=\[).+?(?=\])", "hahah", s)
print(b)

output:
我是一个人(hahah)aaa[hahah]bbbb{确定}

3、文本分句

      待更新

 

参考文章:

正则表达式(括号)、[中括号]、{大括号}的区别小结

Python 正则式学习笔记

要在Python中匹配句首和句尾,你可以使用正则表达式。根据你提供的引用内容,可以看出你已经找到了正则表达式来匹配句首,但对其含义还不太清楚。缩进在Python中是一种特色,用于标明代码块。在Python中,条件语句如if后面跟随一个条件,如果条件成立,则执行与if语句相关的代码块。与其他编程语言不同的是,Python去掉了括号和分号,用缩进来表示代码块的范围。 至于匹配句尾,你提供的引用中没有明确的示例。如果你想要匹配句尾,你可以使用正则表达式中的特殊字符$来表示字符串的结尾。例如,如果你想要匹配以感叹号结尾的句子,你可以使用正则表达式"!$"。同样地,你可以使用其他特殊字符来匹配其他标点符号或句子结尾的标志。 希望这些信息对你有帮助!如果你有任何其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【实例】python中简单分句,通过替代句号 &给句尾(不是句首)添加序号](https://blog.csdn.net/qq_19741181/article/details/79437987)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [从零学Python之入门(五)缩进和选择](https://download.csdn.net/download/weixin_38513794/13777606)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值